package com.unipay.common.utils;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.Data;

import java.util.Collection;
import java.util.Date;
import java.util.List;

/**
 * @Project: yitong_parent
 * @Author: C.yu
 * @Time: 2023-05-25 19:34:12
 * @Desc: TODO  查询实体，查询条件封装
 */
@Data
public class BaseSearch<T> {
    /**
     * 如果值不为空，则添加eq条件
     */
    protected void notNullEq(String fieldName, Object value, QueryWrapper<T> wrapper) {
        if (value != null) {
            wrapper.eq(fieldName, value);
        }
    }

    protected void notNullApply(Object value, String sql, QueryWrapper<T> wrapper) {
        if (value != null) {
            wrapper.apply(sql);
        }
    }

    /**
     * 如果值不为空，则添加eq条件
     */
    protected void notNullInSql(String fieldName, Object value, String sql, QueryWrapper<T> wrapper) {
        if (value != null) {
            wrapper.inSql(fieldName, sql);
        }
    }

    /**
     * 如果值不为空，则添加eq条件
     */
    protected void notNullIn(String fieldName, Collection<?> value, QueryWrapper<T> wrapper) {
        if (value != null) {
            if (value.isEmpty()) {
                wrapper.isNull("id");
            } else {
                wrapper.in(fieldName, value);
            }
        }
    }

    /**
     * 如果值不为空，则添加like条件
     */
    protected void notNullLike(String fieldName, Object value, QueryWrapper<T> wrapper) {
        if (value != null) {
            wrapper.like(fieldName, value);
        }
    }

    /**
     * 如果值不为空，则添加范围条件
     */
    protected void notNullRange(String fieldName, Object[] values, QueryWrapper<T> wrapper) {
        if (values != null) {
            wrapper.and(wrapper1 -> {
                wrapper1.gt(fieldName, values[0]);
                wrapper1.lt(fieldName, values[1]);
            });
        }
    }

    /**
     * 如果值不为空，则添加范围条件
     */
    protected void notNullRange(String fieldName, List<Date> values, QueryWrapper<T> wrapper) {
        if (values != null) {
            wrapper.and(wrapper1 -> {
                wrapper1.gt(fieldName, values.get(0));
                wrapper1.lt(fieldName, values.get(1));
            });
        }
    }
    /**
     * 不为空，≥
     */
    protected void notNullge(String fieldName, Object value, QueryWrapper<T> wrapper) {
        if (value != null) {
            wrapper.ge(fieldName, value);
        }
    }
    /**
     * 不为空，≤
     */
    protected void notNullle(String fieldName, Object value, QueryWrapper<T> wrapper) {
        if (value != null) {
            wrapper.le(fieldName, value);
        }
    }
}
